package com.wesley.interview;

import java.util.List;

/**
 * 泛型
 *
 * @author WangPanYong
 * @since 2024/01/07
 */
public class GenericTypeTest {

    /**
     * extends 和 super 的区别
     *
     */
    public static void extendTest(List<? extends Animal> lists){
        // 正确 因为传入的一定是Animal的子类
        Animal animal = lists.get(0);
        //正确 当然也可以用Object类接收，因为Object是顶层父类
        Object object = lists.get(1);
        //错误 不能用？接收
        //? t = lists.get(2);
        // 错误
        // lists.add(new Animal());
        // 错误
        // lists.add(new Dog());
        // 错误
        // lists.add(object);
        //正确 除了null之外，不允许加入任何元素！
        lists.add(null);
    }

    public static void superTest(List<? super Dog> lists){
        //错误 因为你不知道？到底啥类型
//        Animal animal = lists.get(0);
        // 正确 只能用Object类接收
        Object object = lists.get(1);
        //错误 不能用？接收
//        ? t = lists.get(2);
        //错误
//        lists.add(object);
        //错误
//        lists.add(new Animal());
        //正确
        lists.add(new Dog());
        //正确 可以存放null元素
        lists.add(null);
    }

}

class Animal {

}

class Dog extends Animal{

}